package com.mall.common.utils;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.multipart.MultipartFile;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;

/**
 * 图像上传工具类
 */
@Slf4j
public class ImageUploadUtils {

    @Resource
    private OSS ossClient;

    /**
     * 上传文件到阿里云OSS
     *
     * @param file 要上传的文件
     * @return 返回上传后的文件URL
     * @throws IOException 如果文件处理过程中发生IO异常
     */
    public static String upload(MultipartFile file) throws IOException {
        // 获取文件原始名称
        String origName = file.getOriginalFilename();
        // 生成UUID作为文件名
        String uuid = UUID.randomUUID().toString().replace("-", "");
        // 获取文件的后缀，如 .jpg
        String suffix = origName.substring(origName.lastIndexOf("."));

        // 拼接上文件后缀，即为要存储的文件名
        String objectName = String.format("%s%s", uuid, suffix);

        // 阿里云OSS配置信息
        String endpoint = "oss-cn-hangzhou.aliyuncs.com";
        String accessKeyId = "LTAI5tBVAnWZ6M8be1H2KizR";
        String accessKeySecret = "rUqGhub1jAdL8GfwgA7RBqVXx1wfeg";
        String bucketName = "shopesay";

        // 创建OSS客户端
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        // 上传文件至阿里云 OSS
        ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(file.getInputStream().readAllBytes()));

        // 返回文件的访问链接
        String url = String.format("https://%s.%s/%s", bucketName, endpoint, objectName);
        log.info("==> 上传文件至阿里云 OSS 成功，访问路径: {}", url);
        // 返回上传后的文件URL
        return url;
    }
}
